Python之路 - 异常处理
介绍 🍀
在我们写程序时难免会出现错误 , 一种为语法错误 , 即为python解释器的语法检测都通不过的错误 , 这种错误只能我们在程序执行前就处理好 . 另一种为逻辑错误 , 这是我们在程序设计时所出现的错误 , 也就是我们通常所说的bug
在编程过程中为了增加友好性 , 在程序出现bug时一般不会将错误信息显示给用户 , 而是显示一个提示错误的页面
基本语法
1 | try: |
实例
1 | try:0 |
PS : 在try代码块中只要出现异常 , 那么代码块中异常后面的代码就不会执行了
异常种类 🍀
Python中的异常种类非常多 , 上述中说了个ValueError只能处理值错误 , 当我们需要处理其他的错误时 , 就需要对症下药了 , 并且异常其实也是class , 并且所有的异常都继承了BaseException类
常用异常
异常名称 | 说明 |
---|---|
ValueError | 传入无效的参数 |
AttributeError | 与对象的属性相关 |
IOError | 输入/输出操作失败 , 基本上是无法打开文件 |
ImportError | 无法引入模块或包 , 基本上是路径问题或名称错误 |
IndentationError | 缩进错误 |
IndexError | 下标索引超出范围 , 即索引不存在 |
KeyError | 字典中不存在该key |
KeyboardInterrupt | 用户中断执行 , 即被Ctrl + C |
NameError | 变量还未声明/初始化 |
SyntaxError | 语法错误 |
TypeError | 传入对象类型与要求的不符合 |
UnboundLocalError | 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它 |
ValueError | 传入无效的参数 |
继承关系与其他异常
1 | # 所有异常都继承自BaseException类 |
为什么要说继承关系 , 因为在使用except是 , 它不但捕获该异常 , 还会把该异常类的子类也全部捕获
所以我们把 Exception
也叫做万能异常 , 因为除了SystemExit , KeyboardInterrupt 和 GeneratorExit 三个异常之外 , 其余所有异常基本都为Exception的子类
异常其他结构 🍀
多分支
1 | name = 'Lyon' |
else
1 | num = '1' |
finally
1 | num = 'Lyon' |
主动触发异常 🍀
raise
1 | try: |
自定义异常 🍀
通过继承BaseException来实现
1 | class LyonException(BaseException): |
断言 🍀
断定条件成立 , 不成立就出现AssertionError异常
1 | try: |
注意 :
不要在任何地方都使用try…except , 因为它本身就是你附加给你程序的一种异常处理的逻辑 , 与你的主要的工作是没有关系的 , 这种东西加多了 , 会导致你的代码可读性变差 , 只有在有些异常无法与之的情况下 , 才应该使用try…except , 其他的逻辑错误应该尽量自行修正